package org.example;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})//底层通过枚举实现对多个类型的注解·
//TYPE：类、接口（包括注解类型）或枚举声明。
//FIELD：字段声明（包括枚举常量）。
//METHOD：方法声明。
//PARAMETER：参数声明。
//CONSTRUCTOR：构造器声明。
//LOCAL_VARIABLE：局部变量声明。
//ANNOTATION_TYPE：注解类型声明。
//PACKAGE：包声明（从Java 8开始支持）。
//TYPE_PARAMETER（Java 8新增）：类型参数声明。
//TYPE_USE（Java 8新增）：类型使用声明，这是一个非常灵活的注解目标，可以应用于几乎任何使用类型的地方。
@Retention(RetentionPolicy.RUNTIME)
//SOURCE‌：注解只在源代码级别存在，编译时会被编译器丢弃。这种策略通常用于在编译过程中进行一些特定的处理，比如通过注解处理器生成代码。由于注解不会保留在编译后的字节码中，因此运行时无法获取这些注解信息。
//CLASS‌：注解会被保留在编译后的class文件中，但是在运行时不会被JVM识别。这是默认的保留策略。这种策略通常用于在编译时进行一些检查或处理，比如通过注解来标记某些类或方法，以便在编译阶段进行特殊处理。然而，由于注解在运行时不可见，因此无法通过反射机制获取这些注解信息。
//RUNTIME‌：注解会被保留在编译后的class文件中，并且在运行时也会被JVM识别。因此，可以通过反射机制获取注解信息。这种策略通常用于在运行时进行一些特定的处理，比如通过注解来实现自定义的序列化、反序列化逻辑，或者通过注解来标记某些方法以便进行动态代理等。
public @interface Autoclass {
int value()default 0;

}
